﻿/*
 Copyright (c) 2003-2014, CKSource - Frederico Knabben. All rights reserved.
 For licensing, see LICENSE.md or http://ckeditor.com/license
 */
        (function() {
            CKEDITOR.dialog.add("link", function(g) {
                var l = CKEDITOR.plugins.link, m = function() {
                    var a = this.getDialog(), b = a.getContentElement("target", "popupFeatures"), a = a.getContentElement("target", "linkTargetName"), k = this.getValue();
                    if (b && a)
                        switch (b = b.getElement(), b.hide(), a.setValue(""), k) {
                            case "frame":
                                a.setLabel(g.lang.link.targetFrameName);
                                a.getElement().show();
                                break;
                            case "popup":
                                b.show();
                                a.setLabel(g.lang.link.targetPopupName);
                                a.getElement().show();
                                break;
                            default:
                                a.setValue(k), a.getElement().hide()
                        }
                },
                        f = function(a) {
                            a.target && this.setValue(a.target[this.id] || "")
                        }, h = function(a) {
                    a.advanced && this.setValue(a.advanced[this.id] || "")
                }, i = function(a) {
                    a.target || (a.target = {});
                    a.target[this.id] = this.getValue() || ""
                }, j = function(a) {
                    a.advanced || (a.advanced = {});
                    a.advanced[this.id] = this.getValue() || ""
                }, c = g.lang.common, b = g.lang.link, d;
                return{title: b.title, minWidth: 350, minHeight: 230, contents: [{id: "info", label: b.info, title: b.info, elements: [{id: "linkType", type: "select", label: b.type, "default": "url", items: [[b.toUrl, "url"],
                                        [b.toAnchor, "anchor"], [b.toEmail, "email"]], onChange: function() {
                                        var a = this.getDialog(), b = ["urlOptions", "anchorOptions", "emailOptions"], k = this.getValue(), e = a.definition.getContents("upload"), e = e && e.hidden;
                                        "url" == k ? (g.config.linkShowTargetTab && a.showPage("target"), e || a.showPage("upload")) : (a.hidePage("target"), e || a.hidePage("upload"));
                                        for (e = 0; e < b.length; e++) {
                                            var c = a.getContentElement("info", b[e]);
                                            c && (c = c.getElement().getParent().getParent(), b[e] == k + "Options" ? c.show() : c.hide())
                                        }
                                        a.layout()
                                    }, setup: function(a) {
                                        this.setValue(a.type ||
                                                "url")
                                    }, commit: function(a) {
                                        a.type = this.getValue()
                                    }}, {type: "vbox", id: "urlOptions", children: [{type: "hbox", widths: ["25%", "75%"], children: [{id: "protocol", type: "select", label: c.protocol, "default": "http://", items: [["http://‎", "http://"], ["https://‎", "https://"], ["ftp://‎", "ftp://"], ["news://‎", "news://"], [b.other, ""]], setup: function(a) {
                                                        a.url && this.setValue(a.url.protocol || "")
                                                    }, commit: function(a) {
                                                        a.url || (a.url = {});
                                                        a.url.protocol = this.getValue()
                                                    }}, {type: "text", id: "url", label: c.url, required: !0, onLoad: function() {
                                                        this.allowOnChange =
                                                                !0
                                                    }, onKeyUp: function() {
                                                        this.allowOnChange = !1;
                                                        var a = this.getDialog().getContentElement("info", "protocol"), b = this.getValue(), k = /^((javascript:)|[#\/\.\?])/i, c = /^(http|https|ftp|news):\/\/(?=.)/i.exec(b);
                                                        c ? (this.setValue(b.substr(c[0].length)), a.setValue(c[0].toLowerCase())) : k.test(b) && a.setValue("");
                                                        this.allowOnChange = !0
                                                    }, onChange: function() {
                                                        if (this.allowOnChange)
                                                            this.onKeyUp()
                                                    }, validate: function() {
                                                        var a = this.getDialog();
                                                        return a.getContentElement("info", "linkType") && "url" != a.getValueOf("info", "linkType") ?
                                                                !0 : !g.config.linkJavaScriptLinksAllowed && /javascript\:/.test(this.getValue()) ? (alert(c.invalidValue), !1) : this.getDialog().fakeObj ? !0 : CKEDITOR.dialog.validate.notEmpty(b.noUrl).apply(this)
                                                    }, setup: function(a) {
                                                        this.allowOnChange = !1;
                                                        a.url && this.setValue(a.url.url);
                                                        this.allowOnChange = !0
                                                    }, commit: function(a) {
                                                        this.onChange();
                                                        a.url || (a.url = {});
                                                        a.url.url = this.getValue();
                                                        this.allowOnChange = !1
                                                    }}], setup: function() {
                                                this.getDialog().getContentElement("info", "linkType") || this.getElement().show()
                                            }}, {type: "button",
                                            id: "browse", hidden: "true", filebrowser: "info:url", label: c.browseServer}]}, {type: "vbox", id: "anchorOptions", width: 260, align: "center", padding: 0, children: [{type: "fieldset", id: "selectAnchorText", label: b.selectAnchor, setup: function() {
                                                d = l.getEditorAnchors(g);
                                                this.getElement()[d && d.length ? "show" : "hide"]()
                                            }, children: [{type: "hbox", id: "selectAnchor", children: [{type: "select", id: "anchorName", "default": "", label: b.anchorName, style: "width: 100%;", items: [[""]], setup: function(a) {
                                                                this.clear();
                                                                this.add("");
                                                                if (d)
                                                                    for (var b =
                                                                            0; b < d.length; b++)
                                                                        d[b].name && this.add(d[b].name);
                                                                a.anchor && this.setValue(a.anchor.name);
                                                                (a = this.getDialog().getContentElement("info", "linkType")) && "email" == a.getValue() && this.focus()
                                                            }, commit: function(a) {
                                                                a.anchor || (a.anchor = {});
                                                                a.anchor.name = this.getValue()
                                                            }}, {type: "select", id: "anchorId", "default": "", label: b.anchorId, style: "width: 100%;", items: [[""]], setup: function(a) {
                                                                this.clear();
                                                                this.add("");
                                                                if (d)
                                                                    for (var b = 0; b < d.length; b++)
                                                                        d[b].id && this.add(d[b].id);
                                                                a.anchor && this.setValue(a.anchor.id)
                                                            }, commit: function(a) {
                                                                a.anchor ||
                                                                        (a.anchor = {});
                                                                a.anchor.id = this.getValue()
                                                            }}], setup: function() {
                                                        this.getElement()[d && d.length ? "show" : "hide"]()
                                                    }}]}, {type: "html", id: "noAnchors", style: "text-align: center;", html: '<div role="note" tabIndex="-1">' + CKEDITOR.tools.htmlEncode(b.noAnchors) + "</div>", focus: !0, setup: function() {
                                                this.getElement()[d && d.length ? "hide" : "show"]()
                                            }}], setup: function() {
                                        this.getDialog().getContentElement("info", "linkType") || this.getElement().hide()
                                    }}, {type: "vbox", id: "emailOptions", padding: 1, children: [{type: "text", id: "emailAddress",
                                            label: b.emailAddress, required: !0, validate: function() {
                                                var a = this.getDialog();
                                                return!a.getContentElement("info", "linkType") || "email" != a.getValueOf("info", "linkType") ? !0 : CKEDITOR.dialog.validate.notEmpty(b.noEmail).apply(this)
                                            }, setup: function(a) {
                                                a.email && this.setValue(a.email.address);
                                                (a = this.getDialog().getContentElement("info", "linkType")) && "email" == a.getValue() && this.select()
                                            }, commit: function(a) {
                                                a.email || (a.email = {});
                                                a.email.address = this.getValue()
                                            }}, {type: "text", id: "emailSubject", label: b.emailSubject,
                                            setup: function(a) {
                                                a.email && this.setValue(a.email.subject)
                                            }, commit: function(a) {
                                                a.email || (a.email = {});
                                                a.email.subject = this.getValue()
                                            }}, {type: "textarea", id: "emailBody", label: b.emailBody, rows: 3, "default": "", setup: function(a) {
                                                a.email && this.setValue(a.email.body)
                                            }, commit: function(a) {
                                                a.email || (a.email = {});
                                                a.email.body = this.getValue()
                                            }}], setup: function() {
                                        this.getDialog().getContentElement("info", "linkType") || this.getElement().hide()
                                    }}]}, {id: "target", requiredContent: "a[target]", label: b.target, title: b.target,
                            elements: [{type: "hbox", widths: ["50%", "50%"], children: [{type: "select", id: "linkTargetType", label: c.target, "default": "notSet", style: "width : 100%;", items: [[c.notSet, "notSet"], [b.targetFrame, "frame"], [b.targetPopup, "popup"], [c.targetNew, "_blank"], [c.targetTop, "_top"], [c.targetSelf, "_self"], [c.targetParent, "_parent"]], onChange: m, setup: function(a) {
                                                a.target && this.setValue(a.target.type || "notSet");
                                                m.call(this)
                                            }, commit: function(a) {
                                                a.target || (a.target = {});
                                                a.target.type = this.getValue()
                                            }}, {type: "text", id: "linkTargetName",
                                            label: b.targetFrameName, "default": "", setup: function(a) {
                                                a.target && this.setValue(a.target.name)
                                            }, commit: function(a) {
                                                a.target || (a.target = {});
                                                a.target.name = this.getValue().replace(/\W/gi, "")
                                            }}]}, {type: "vbox", width: "100%", align: "center", padding: 2, id: "popupFeatures", children: [{type: "fieldset", label: b.popupFeatures, children: [{type: "hbox", children: [{type: "checkbox", id: "resizable", label: b.popupResizable, setup: f, commit: i}, {type: "checkbox", id: "status", label: b.popupStatusBar, setup: f, commit: i}]}, {type: "hbox",
                                                    children: [{type: "checkbox", id: "location", label: b.popupLocationBar, setup: f, commit: i}, {type: "checkbox", id: "toolbar", label: b.popupToolbar, setup: f, commit: i}]}, {type: "hbox", children: [{type: "checkbox", id: "menubar", label: b.popupMenuBar, setup: f, commit: i}, {type: "checkbox", id: "fullscreen", label: b.popupFullScreen, setup: f, commit: i}]}, {type: "hbox", children: [{type: "checkbox", id: "scrollbars", label: b.popupScrollBars, setup: f, commit: i}, {type: "checkbox", id: "dependent", label: b.popupDependent, setup: f, commit: i}]}, {type: "hbox",
                                                    children: [{type: "text", widths: ["50%", "50%"], labelLayout: "horizontal", label: c.width, id: "width", setup: f, commit: i}, {type: "text", labelLayout: "horizontal", widths: ["50%", "50%"], label: b.popupLeft, id: "left", setup: f, commit: i}]}, {type: "hbox", children: [{type: "text", labelLayout: "horizontal", widths: ["50%", "50%"], label: c.height, id: "height", setup: f, commit: i}, {type: "text", labelLayout: "horizontal", label: b.popupTop, widths: ["50%", "50%"], id: "top", setup: f, commit: i}]}]}]}]}, {id: "upload", label: b.upload, title: b.upload, hidden: !0,
                            filebrowser: "uploadButton", elements: [{type: "file", id: "upload", label: c.upload, style: "height:40px", size: 29}, {type: "fileButton", id: "uploadButton", label: c.uploadSubmit, filebrowser: "info:url", "for": ["upload", "upload"]}]}, {id: "advanced", label: b.advanced, title: b.advanced, elements: [{type: "vbox", padding: 1, children: [{type: "hbox", widths: ["45%", "35%", "20%"], children: [{type: "text", id: "advId", requiredContent: "a[id]", label: b.id, setup: h, commit: j}, {type: "select", id: "advLangDir", requiredContent: "a[dir]", label: b.langDir,
                                                    "default": "", style: "width:110px", items: [[c.notSet, ""], [b.langDirLTR, "ltr"], [b.langDirRTL, "rtl"]], setup: h, commit: j}, {type: "text", id: "advAccessKey", requiredContent: "a[accesskey]", width: "80px", label: b.acccessKey, maxLength: 1, setup: h, commit: j}]}, {type: "hbox", widths: ["45%", "35%", "20%"], children: [{type: "text", label: b.name, id: "advName", requiredContent: "a[name]", setup: h, commit: j}, {type: "text", label: b.langCode, id: "advLangCode", requiredContent: "a[lang]", width: "110px", "default": "", setup: h, commit: j}, {type: "text",
                                                    label: b.tabIndex, id: "advTabIndex", requiredContent: "a[tabindex]", width: "80px", maxLength: 5, setup: h, commit: j}]}]}, {type: "vbox", padding: 1, children: [{type: "hbox", widths: ["45%", "55%"], children: [{type: "text", label: b.advisoryTitle, requiredContent: "a[title]", "default": "", id: "advTitle", setup: h, commit: j}, {type: "text", label: b.advisoryContentType, requiredContent: "a[type]", "default": "", id: "advContentType", setup: h, commit: j}]}, {type: "hbox", widths: ["45%", "55%"], children: [{type: "text", label: b.cssClasses, requiredContent: "a(cke-xyz)",
                                                    "default": "", id: "advCSSClasses", setup: h, commit: j}, {type: "text", label: b.charset, requiredContent: "a[charset]", "default": "", id: "advCharset", setup: h, commit: j}]}, {type: "hbox", widths: ["45%", "55%"], children: [{type: "text", label: b.rel, requiredContent: "a[rel]", "default": "", id: "advRel", setup: h, commit: j}, {type: "text", label: b.styles, requiredContent: "a{cke-xyz}", "default": "", id: "advStyles", validate: CKEDITOR.dialog.validate.inlineStyle(g.lang.common.invalidInlineStyle), setup: h, commit: j}]}]}]}], onShow: function() {
                        var a =
                                this.getParentEditor(), b = a.getSelection(), c = null;
                        (c = l.getSelectedLink(a)) && c.hasAttribute("href") ? b.getSelectedElement() || b.selectElement(c) : c = null;
                        a = l.parseLinkAttributes(a, c);
                        this._.selectedElement = c;
                        this.setupContent(a)
                    }, onOk: function() {
                        var a = {};
                        this.commitContent(a);
                        var b = g.getSelection(), c = l.getLinkAttributes(g, a);
                        if (this._.selectedElement) {
                            var e = this._.selectedElement, d = e.data("cke-saved-href"), f = e.getHtml();
                            e.setAttributes(c.set);
                            e.removeAttributes(c.removed);
                            if (d == f || "email" == a.type && -1 !=
                                    f.indexOf("@"))
                                e.setHtml("email" == a.type ? a.email.address : c.set["data-cke-saved-href"]), b.selectElement(e);
                            delete this._.selectedElement
                        } else
                            b = b.getRanges()[0], b.collapsed && (a = new CKEDITOR.dom.text("email" == a.type ? a.email.address : c.set["data-cke-saved-href"], g.document), b.insertNode(a), b.selectNodeContents(a)), c = new CKEDITOR.style({element: "a", attributes: c.set}), c.type = CKEDITOR.STYLE_INLINE, c.applyToRange(b, g), b.select()
                    }, onLoad: function() {
                        g.config.linkShowAdvancedTab || this.hidePage("advanced");
                        g.config.linkShowTargetTab ||
                                this.hidePage("target")
                    }, onFocus: function() {
                        var a = this.getContentElement("info", "linkType");
                        a && "url" == a.getValue() && (a = this.getContentElement("info", "url"), a.select())
                    }}
            })
        })();